package com.zhentao.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Future;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import lombok.Data;

/**
 * 倒数日事件表
 * @TableName tc_countdown_events
 */
@TableName(value = "tc_countdown_events")
@Data
public class TcCountdownEvent implements Serializable {
    /**
     * 主键，自增
     */
    @TableId(type = IdType.AUTO)
    private Integer id;

    /**
     * 倒数日名称
     */
    @NotBlank(message = "倒数日名称不能为空")
    @Size(min = 1, max = 100, message = "倒数日名称长度必须在1-100个字符之间")
    private String eventName;

    /**
     * 目标日期
     */
    @NotNull(message = "目标日期不能为空")
    @Future(message = "目标日期必须是未来日期")
    private LocalDate targetDate;

    /**
     * 创建人
     */
    @NotBlank(message = "创建人不能为空")
    @Size(max = 50, message = "创建人长度不能超过50个字符")
    private String creator;

    /**
     * 创建时间，自动填充当前时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间，自动更新
     */
    private LocalDateTime updateTime;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;

    /**
     * 计算剩余天数
     */
    public long getRemainingDays() {
        if (targetDate == null) {
            return 0;
        }
        LocalDate today = LocalDate.now();
        return java.time.temporal.ChronoUnit.DAYS.between(today, targetDate);
    }

    /**
     * 判断是否已过期
     */
    public boolean isExpired() {
        return getRemainingDays() < 0;
    }
}

